package com.hdu.hot100.matricx;

import java.util.ArrayList;
import java.util.List;

public class lc54 {
    class Solution {
        public List<Integer> spiralOrder(int[][] matrix) {
            int a = 0;
            int b = 0;
            int c = matrix.length - 1;
            int d = matrix[0].length - 1;
            List<Integer> ans = new ArrayList<>();
            while (a <= c && b <= d)
            {
                handle(matrix, a, b, d, c, ans);
                a++;
                b++;
                c--;
                d--;
            }
            return ans;
        }

        void handle(int[][] matrix, int a, int b, int d, int c, List<Integer> ans)
        {
            if (a == c)
            {
                for (int i = b; i <= d; i++)
                {
                    ans.add(matrix[a][i]);
                }
            }
            else if (b == d)
            {
                for (int i = a; i <= c; i++)
                {
                    ans.add(matrix[i][b]);
                }
            }
            else
            {
                for (int i = b; i < d; i++)
                {
                    ans.add(matrix[a][i]);
                }
                for (int i = a; i < c; i++)
                {
                    ans.add(matrix[i][d]);
                }
                for (int i = d; i > b; i--)
                {
                    ans.add(matrix[c][i]);
                }
                for (int i = c; i > a; i--)
                {
                    ans.add(matrix[i][b]);
                }
            }
        }
    }
}
